home *** CD-ROM | disk | FTP | other *** search
/ Softdisk G-S 112 / SGDS 112.2mg / SDGS.112 / D / EXPLORER.M (.txt) < prev    next >
Encoding:
Applesoft BASIC Source Code  |  1989-09-06  |  8.7 KB  |  380 lines  |  [FC] Applesoft BASIC Program (0x0801)

  1. 10  HIMEM: 36352
  2. 100  REM  Logistic Difference Equation explorer
  3. 110  REM  (C) Cregg Hardwick   1989
  4. 1000  REM 
  5. 1030  DATA  2,0,6,0,18,0
  6. 1040  DATA  45,45,45,53,54,62
  7. 1050  DATA  63,63,63,36,36,0,6,0
  8. 1060  DATA  104,168,104,166,223,154,72,152,72,96,300
  9. 1080  REM    Routine Main
  10. 1090 D$ =  CHR$(4): PRINT D$;"Bload Explorer.X"
  11. 1110  ROT= 0:CLR = 782:BOX = 24576:BELL% = 1
  12. 1120 MOVPG = 2048:AUXIL = 2054
  13. 1122  CALL AUXIL
  14. 1125  GOSUB 1500
  15. 1130  GOSUB 4000
  16. 1150 DN% = 278:TP% = 159
  17. 1160 R = 1:RO = 1
  18. 1170 IN = 3/280:MG = 1
  19. 1180 GS = TP%:GF = 0
  20. 1185  CALL CLR
  21. 1186  GOSUB 5000:TG% = 1
  22. 1188  POKE 768,160
  23. 1189  POKE 773,0: IF TG% = 1  THEN  POKE 773,255
  24. 1190  PRINT "        <C>ompute new graph or        ";
  25. 1191  POKE 773,0: PRINT " ": IF TG% = 2  THEN  POKE 773,255
  26. 1192  PRINT "        <L>oad a graph from disk.       "
  27. 1193  POKE 773,0: PRINT "   Arrows to select, RETURN to accept.  "
  28. 1194  PRINT " ESC to quit.                ? for Help."
  29. 1195 HELP$ = "7": GOSUB 5200
  30. 1196  IF CM% = 27  THEN  GOSUB 9000: GOTO 1186
  31. 1198  IF C$ = "C"  OR C$ = "c"  THEN TG% = 1: GOTO 1188
  32. 1199  IF C$ = "L"  OR C$ = "l"  THEN TG% = 2: GOTO 1188
  33. 1200  IF CM% = 10  OR CM% = 21  OR CM% = 11  OR CM% = 8  THEN TG% = TG% +1
  34. 1202  IF TG% = 3  THEN TG% = 1
  35. 1204  IF CM% < >13  THEN  GOTO 1188
  36. 1210  IF TG% = 2  THEN  GOSUB 11000: GOTO 1280
  37. 1220  GOSUB 5000: POKE 768,160
  38. 1229 PT$ = "Enter settling time in generations:":VL% = 22
  39. 1230  GOSUB 1600:CS% = VL%
  40. 1249 PT$ = "Enter number of points to plot:":VL% = 23
  41. 1250  GOSUB 1600:DT% = VL%
  42. 1270  GOSUB 2430
  43. 1280 CR% = 1
  44. 1300  GOSUB 2950
  45. 1310  IF CM% = 27  THEN  GOSUB 9000: GOTO 1300
  46. 1320 FY% = 1
  47. 1330  GOSUB 1750
  48. 1340  IF CM% = 27  THEN 1280
  49. 1390 R = RO +(FX% *IN)
  50. 1400 RO = R
  51. 1410 MG = MG *BS
  52. 1420 IN = IN *(1/BS)
  53. 1430 GS = GS *BS
  54. 1440 GF = (GF +(TP% -(FY% +HT%))) *BS
  55. 1450  GOTO 1186
  56. 1500  REM    Routine Poke ShapeTable/Fix
  57. 1505 DEST = 3072
  58. 1510  POKE 232,DEST -( INT(DEST/256) *256): POKE 233, INT(DEST/256)
  59. 1520  READ BYTE%
  60. 1530  POKE DEST,BYTE%
  61. 1550 DEST = DEST +1
  62. 1560  READ BYTE%
  63. 1570  IF BYTE% < >300  THEN 1530
  64. 1580 FIX = DEST -10
  65. 1590  RETURN 
  66. 1600  POKE 768,(8 *VL%) -8: PRINT PT$;
  67. 1645 VL$ = " ": POKE 772,2: PRINT " ";
  68. 1650 HELP$ = "1": GOSUB 5200
  69. 1652  IF CM% = 27  THEN  GOSUB 9000
  70. 1655  IF  LEN(VL$) <2  OR (CM% < >8  AND CM% < >127)  THEN 1680
  71. 1660 VL$ =  LEFT$(VL$, LEN(VL$) -1)
  72. 1670  POKE 770, PEEK(770) -1: POKE 769,0
  73. 1675  PRINT "  ";: POKE 770, PEEK(770) -2
  74. 1680  IF CM% = 13  THEN 1720
  75. 1690  IF  LEN(VL$) >4  OR CM% <48  OR CM% >57  THEN 1710
  76. 1700 VL$ = VL$ +C$: POKE 769,1: PRINT C$;
  77. 1710  GOTO 1650
  78. 1720 V =  VAL(VL$): IF V >9000  THEN V = 9000
  79. 1730  IF V = 0  THEN V = 1
  80. 1740 VL% = V: POKE 772,1: POKE 770,1: RETURN 
  81. 1750  REM   Routine MovMenu
  82. 1760  GOSUB 5000
  83. 1800  PRINT "Use arrows to move box.   '<' and '>'"
  84. 1810  PRINT "SPACE adjusts movement.  size the box."
  85. 1820  PRINT "RETURN to blow up box."
  86. 1830  PRINT "ESC goes back one menu.   ? for Help.";: POKE 768,32
  87. 1842 WD% = 49
  88. 1844  IF I% >WD%  THEN FX% = I% -WD%: GOTO 1850
  89. 1846 FX% = 1
  90. 1850  GOSUB 2370
  91. 1860 HELP$ = "2": GOSUB 5200
  92. 1870  GOSUB 2370
  93. 1900  GOSUB 1970
  94. 1910  GOSUB 2090
  95. 1920  GOSUB 2200
  96. 1930  GOSUB 2300
  97. 1940  GOSUB 2370
  98. 1950  IF CM% < >27  AND CM% < >13  THEN 1860
  99. 1955  IF CM% = 27  THEN  GOSUB 2370
  100. 1960  RETURN 
  101. 1970  REM      Routine SizeFrame
  102. 1990  IF C$ < >"<"  AND C$ < >","  THEN 2020
  103. 2000  IF WD% >13  THEN WD% = WD% -7
  104. 2020  IF C$ < >">"  AND C$ < >"."  THEN 2060
  105. 2030  IF WD% <78  THEN WD% = WD% +7
  106. 2040  IF FX% +WD% >I%  OR FY% +HT% >TP%  THEN WD% = WD% -7
  107. 2060 BS = DN%/WD%
  108. 2070 HT% = TP%/BS
  109. 2080  RETURN 
  110. 2090  REM      Routine VertMov
  111. 2120  IF CM% < >11  THEN 2150
  112. 2130  IF FY% >CR%  THEN FY% = FY% -CR%: GOTO 2150
  113. 2132 FY% = TP% -HT% -1
  114. 2150  IF CM% < >10  THEN 2180
  115. 2160  IF FY% <TP% -HT% -CR%  THEN FY% = FY% +CR%: GOTO 2180
  116. 2170 FY% = 0
  117. 2180  RETURN 
  118. 2200  REM      Routine HorizMov
  119. 2220  IF CM% < >8  THEN 2250
  120. 2230  IF FX% >CR%  THEN FX% = FX% -CR%: GOTO 2250
  121. 2240 FX% = I% -WD% -1
  122. 2250  IF CM% < >21  THEN 2280
  123. 2260  IF FX% <I% -WD% -CR%  THEN FX% = FX% +CR%: GOTO 2280
  124. 2270 FX% = 0
  125. 2280  RETURN 
  126. 2300  REM      Routine CurSkip
  127. 2320  IF C$ < >" "  THEN 2360
  128. 2330 CR% = CR% *4
  129. 2340  IF CR% >16  THEN CR% = 1
  130. 2360  RETURN 
  131. 2370  REM     Routine XDraw_Frame
  132. 2380 SZ% = (WD%/7): SCALE= SZ%
  133. 2400  XDRAW 1 AT FX%,FY%
  134. 2420  RETURN 
  135. 2430  REM     Routine DrawGraph
  136. 2510 I% = 0
  137. 2520  GOSUB 5000
  138. 2530  POKE 770,9: PRINT "Magnification :";MG
  139. 2540  PRINT : PRINT "     Plotting...  Press Esc to abort."
  140. 2550  HCOLOR= 0: HPLOT 0,0 TO 0,160
  141. 2560  HCOLOR= (MD% *4) -4
  142. 2571  HPLOT I%,TP%
  143. 2575  FOR L = 1 TO MD%
  144. 2580 I% = I% +1:R = R +IN
  145. 2585  HPLOT I%,TP% TO I%,0
  146. 2590  NEXT L
  147. 2600  IF MD% = 1  THEN  HCOLOR= 3: GOTO 2610
  148. 2602  HCOLOR= 6
  149. 2610  HPLOT I%,TP%
  150. 2630 X = 0.1
  151. 2640  CALL AUXIL +6
  152. 2650  CALL AUXIL +9
  153. 2660 CM% =  PEEK( -16384)
  154. 2670  IF CM% < >155  AND I% <DN%  THEN 2560
  155. 2675  HCOLOR= (MD% *4) -4
  156. 2677  IF I% <DN%  THEN  CALL AUXIL +3
  157. 2680  POKE  -16368,0
  158. 2690  IF I% > = DN%  THEN I% = DN% -1
  159. 2692  IF I% <WD%  THEN I% = WD% +1
  160. 2700  IF CM% < >155  AND BELL%  THEN  PRINT  CHR$(7) CHR$(7) CHR$(7)
  161. 2710  RETURN 
  162. 2946  REM    Routine Chose Analysis or Blow up.
  163. 2950  GOSUB 5000:TG% = 1
  164. 2955  POKE 768,160
  165. 2956  POKE 773,0: IF TG% = 1  THEN  POKE 773,255
  166. 2960  PRINT "  Press <T> for Time-series analysis. ";
  167. 2966  POKE 773,0: PRINT " ": IF TG% = 2  THEN  POKE 773,255
  168. 2970  PRINT "  <B> Blows up a section of graph.   "
  169. 2976  POKE 773,0: PRINT " Arrows to select, RETURN to accept."
  170. 2980  PRINT " ESC to quit. S to Save. ? for Help."
  171. 2990 HELP$ = "3": GOSUB 5200
  172. 3000  IF CM% = 27  THEN 3060
  173. 3030  IF C$ = "S"  OR C$ = "s"  THEN  GOSUB 10000: GOTO 2950
  174. 3032  IF C$ = "B"  OR C$ = "b"  THEN TG% = 2: GOTO 2955
  175. 3033  IF C$ = "T"  OR C$ = "t"  THEN TG% = 1: GOTO 2955
  176. 3034  IF CM% = 10  OR CM% = 21  THEN TG% = TG% +1
  177. 3035  IF CM% = 11  OR CM% = 8  THEN TG% = TG% +1
  178. 3037  IF TG% = 3  THEN TG% = 1
  179. 3039  IF CM% < >13  THEN  GOTO 2955
  180. 3040  IF TG% = 1  THEN  GOSUB 3080
  181. 3050  IF CM% = 27  THEN 2950
  182. 3060  RETURN 
  183. 3080  REM    Routine TimeSeries
  184. 3110 T1% = FX%:T2% = I%
  185. 3120 WD% = 1
  186. 3130  IF I% >1  THEN FX% = I% -1: GOTO 3140
  187. 3140 FX% = 1: GOSUB 3430
  188. 3150  GOSUB 5000
  189. 3160  PRINT "Use arrows to move cursor line."
  190. 3170  PRINT "SPACE adjusts movement of cursor line."
  191. 3180  PRINT "RETURN to run time-series analysis."
  192. 3190  PRINT "ESC for previous menu.   ? for Help.";
  193. 3210 HELP$ = "4": GOSUB 5200
  194. 3220  IF CM% = 27  THEN 3370
  195. 3230  GOSUB 3430
  196. 3260  GOSUB 2200
  197. 3270  GOSUB 2300
  198. 3280  GOSUB 3430
  199. 3290  IF CM% < >13  THEN 3210
  200. 3310  CALL MOVPG
  201. 3320  CALL CLR: POKE 768,160: GOSUB 3470
  202. 3340 I% = T2%: CALL MOVPG +3
  203. 3370  IF CM% < >27  THEN 3150
  204. 3380  GOSUB 3430
  205. 3390 CR% = 1:FX% = T1%:I% = T2%
  206. 3410  RETURN 
  207. 3430  SCALE= 130
  208. 3440  XDRAW 2 AT FX%,15
  209. 3460  RETURN 
  210. 3470  REM   Routine Analysis
  211. 3490 AN = RO +(FX% *INC)
  212. 3500 X = 0.1:J = 150:JO = 150: HCOLOR= 3
  213. 3510  CALL CLR: POKE 768,160
  214. 3520  PRINT "Time-Series analysis at ";AN
  215. 3530  PRINT "SPACE or RETURN continues analysis."
  216. 3540  PRINT "ESC returns to Analysis/Blow up Menu."
  217. 3550  PRINT "Any other key returns to last menu.";
  218. 3560 I% = 0:IO% = 0: HPLOT 0,J
  219. 3580  FOR L = 1 TO 50
  220. 3590 I% = I% +5
  221. 3592  HPLOT I%,0 TO I%,5: HPLOT I%,153 TO I%,158
  222. 3600 X = AN *X *(1 -X)
  223. 3610 J = 145 -(X *145)
  224. 3620  IF J >0  AND J <150  THEN  HPLOT IO%,JO TO I%,J
  225. 3625 IO% = I%:JO = J
  226. 3630  NEXT L
  227. 3640 HELP$ = "5": GOSUB 5200
  228. 3650  IF CM% = 13  OR CM% = 32  THEN 3510
  229. 3660  RETURN 
  230. 4000  REM    Title screen / Get Video Mode
  231. 4020  POKE 774,7: POKE 775,2: POKE 771,0
  232. 4025  POKE 773,255: CALL BOX,1,1,40,24
  233. 4030  POKE 768,31: POKE 769,4: CALL BOX,10,3,22,5
  234. 4040  POKE 770,11: POKE 772,3: PRINT "CHAOS EXPLORER": POKE 772,1
  235. 4050  PRINT : PRINT : PRINT 
  236. 4060  POKE 770,2: PRINT "Logistic Difference Equation explorer": PRINT 
  237. 4070  POKE 770,5: PRINT "Come take a voyage into a world"
  238. 4080  POKE 770,9: PRINT "of Chaos mathematics.": HCOLOR= 4
  239. 4090  POKE 768,168: POKE 770,12: PRINT "by Cregg Hardwick"
  240. 4100  FOR L = 25 TO 141  STEP 7
  241. 4110 X =  COS(L/11) *20 +144:XO =  COS(L/44) *45 +144
  242. 4120  HPLOT L,XO TO L,X: HPLOT 274 -L,XO TO 274 -L,X
  243. 4130  NEXT L
  244. 4190  FOR L = 1 TO 500: IF  PEEK( -16384) >127  THEN 4200
  245. 4195  NEXT L
  246. 4200  POKE  -16368,0: POKE 768,135: CALL BOX,8,17,26,5
  247. 4210  POKE 770,10: POKE 769,4: PRINT "Select Monocrome<1>"
  248. 4220  POKE 770,10: POKE 769,0: PRINT "or Color<2> graphics"
  249. 4225  POKE 770,15: PRINT "? for Help"
  250. 4230  POKE 768,104: POKE 770,20
  251. 4233 HELP$ = "6": GOSUB 5200
  252. 4240  IF CM% = 27  THEN  GOSUB 9000
  253. 4250  IF C$ < >"1"  AND C$ < >"2"  THEN 4230
  254. 4260 MD% =  VAL(C$)
  255. 4270  POKE 773,0
  256. 4280  RETURN 
  257. 5000  REM    Routine ClearText
  258. 5010  HCOLOR= 0
  259. 5020  FOR L = 159 TO 191
  260. 5030  HPLOT 0,L TO 279,L
  261. 5040  NEXT L
  262. 5050  POKE 768,160: POKE 770,0
  263. 5060  RETURN 
  264. 5200  REM    Handle Keypresses
  265. 5204  POKE  -16368,0: GET C$:CM% =  ASC(C$)
  266. 5205  IF C$ < >"?"  AND C$ < >"/"  AND CM% < >19  THEN 5490
  267. 5210  IF  PEEK(MOVPG +18) >60  THEN 5490
  268. 5220  CALL MOVPG: CALL BOX,2,4,30,8:TA% = 6
  269. 5230 T3% =  PEEK(768):T4% =  PEEK(771):T5% =  PEEK(772)
  270. 5235 T6% =  PEEK(773):T7% =  PEEK(774):T8% =  PEEK(770)
  271. 5240  POKE 774,7: POKE 768,30: POKE 773,255: POKE 771,1: POKE 772,1
  272. 5250  IF C$ = "?"  OR C$ = "/"  THEN  GOSUB 5500
  273. 5260  IF CM% < >19  THEN 5280
  274. 5262  POKE 770,3: PRINT "S O U N D :": PRINT : POKE 770,3
  275. 5265  IF BELL%  THEN BELL% = 0: PRINT "Sound off": GOTO 5270
  276. 5266 BELL% = 1: PRINT "Sound on"
  277. 5270  GOSUB 5800
  278. 5280  REM  <<< Add next handler here
  279. 5450  POKE 768,T3%: POKE 771,T4%: POKE 772,T5%: POKE 770,T8%
  280. 5460  POKE 773,T6%: POKE 774,T7%: CALL MOVPG +3
  281. 5490  RETURN 
  282. 5500  REM     Routine Help
  283. 5510  POKE 770,3: PRINT "H E L P :": PRINT 
  284. 5520  POKE 770,4: PRINT "Searching . . .";
  285. 5530  ONERR  GOTO 5730
  286. 5560  PRINT D$"Open Explore.Hlp": PRINT D$"Read Explore.Hlp"
  287. 5570  INPUT HT$: IF HT$ = "~"  THEN 5700
  288. 5580  IF  LEFT$(HT$,1) < >"*"  THEN 5570
  289. 5585  IF  MID$ (HT$,2,1) < >HELP$  THEN 5570
  290. 5590 T9% =  VAL( MID$ (HT$,3,2)):TA% =  VAL( MID$ (HT$,5,2)) +5
  291. 5592 COM$ = "Position Explore.Hlp,R" + MID$ (HT$,7)
  292. 5593  PRINT D$;COM$: PRINT D$"Read Explore.Hlp"
  293. 5595  CALL BOX,3,6,T9%,TA%: POKE 768,48
  294. 5600  INPUT HT$
  295. 5610  IF  LEFT$(HT$,1) = "*"  OR HT$ = "~"  THEN  GOSUB 5800: GOTO 5710
  296. 5615  POKE 770,4
  297. 5620  IF  RIGHT$(HT$,1) < >"*"  THEN  PRINT HT$: GOTO 5600
  298. 5630  PRINT  LEFT$(HT$, LEN(HT$) -1): PRINT 
  299. 5640  POKE 770,3: PRINT "Press any key. . ."
  300. 5645  IF  PEEK( -16384) < = 127  THEN 5645
  301. 5650  IF  PEEK( -16384) = 155  THEN 5710
  302. 5660  POKE  -16368,0
  303. 5690  GOTO 5595
  304. 5700  POKE 770,3: PRINT "No help available on this.": GOSUB 5800
  305. 5710  PRINT D$"Close Explore.Hlp"
  306. 5720  RETURN 
  307. 5730  POKE 216,0: CALL FIX
  308. 5740  POKE 770,3: PRINT "Unable to read 'Explore.Hlp'."
  309. 5750  GOSUB 5800: GOTO 5710
  310. 5800  REM     Routine Exit tab
  311. 5805 TA% = 36 +(TA% *8): POKE 768,TA%: POKE 770,3: PRINT " Press any key. . . "
  312. 5810  HCOLOR= 3: HPLOT 21,TA% +8 TO 145,TA% +8
  313. 5812  HCOLOR= 0: HPLOT 20,TA% +2 TO 20,TA% +8: HPLOT 146,TA% +8 TO 146,TA% +2
  314. 5815  HPLOT 19,TA% +2 TO 19,TA% +9 TO 147,TA% +9 TO 147,TA% +2
  315. 5820  IF  PEEK( -16384) < = 127  THEN 5820
  316. 5830  POKE  -16368,0
  317. 5840  RETURN 
  318. 9000  REM     Routine Exit program
  319. 9005 T3% =  PEEK(768):T4% =  PEEK(771):T5% =  PEEK(772)
  320. 9006 T6% =  PEEK(773):T7% =  PEEK(774):T8% =  PEEK(770)
  321. 9010  CALL MOVPG: CALL BOX,3,7,36,9: POKE 774,7
  322. 9020  POKE 768,60: POKE 773,255: POKE 771,1: POKE 772,1
  323. 9025  POKE 770,16: PRINT "E X I T ?": PRINT 
  324. 9030  POKE 770,7: PRINT "Press <Y> to quit program."
  325. 9035  POKE 770,5: PRINT "Press Esc to return to program."
  326. 9040  POKE 770,4: PRINT "Press any other key to run again."
  327. 9050  GET EX$:CM% =  ASC(EX$)
  328. 9060  IF CM% < >27  THEN 9070
  329. 9065  POKE 768,T3%: POKE 771,T4%: POKE 772,T5%: POKE 770,T8%
  330. 9066  POKE 773,T6%: POKE 774,T7%: CALL MOVPG +3
  331. 9067  RETURN 
  332. 9070  IF EX$ = "Y"  OR EX$ = "y"  THEN  PRINT D$"BYE"
  333. 9080  RUN 
  334. 10000  REM  | Okay to add new char to input string...
  335. 10001  GOSUB 5000
  336. 10010  PRINT "Please enter a filename or"
  337. 10020  PRINT "press Return to abort."
  338. 10030  GOSUB 12000: IF C$ = ""  THEN 10500
  339. 10035  GOSUB 5000
  340. 10040 FILE$ = C$ +".Dat": ONERR  GOTO 11400
  341. 10050  PRINT D$"OPEN "FILE$: PRINT D$"WRITE "FILE$
  342. 10060  PRINT I%: PRINT R: PRINT RO: PRINT MG: PRINT IN: PRINT GS: PRINT GF
  343. 10070  PRINT D$"Close "FILE$
  344. 10080 FILE$ = "BSAVE " +C$ +".Pic,A$2000,l$2000"
  345. 10090  PRINT D$;FILE$
  346. 10500  RETURN 
  347. 11000  REM  Load file
  348. 11010  GOSUB 5000: PRINT "Please enter name of file to load."
  349. 11015  GOSUB 12000
  350. 11020 FILE$ = C$ +".Pic"
  351. 11025  ONERR  GOTO 11500
  352. 11030  PRINT D$"BLOAD "FILE$
  353. 11049 FILE$ = C$ +".Dat"
  354. 11050  PRINT D$"OPEN "FILE$: PRINT D$"READ "FILE$
  355. 11060  INPUT I%,R,RO,MG,IN,GS,GF
  356. 11070  PRINT D$"Close "FILE$
  357. 11080  RETURN 
  358. 11400  POKE 216,0: CALL FIX: GOSUB 5000
  359. 11410  POKE 770,0: PRINT "Unable to write '"FILE$"'."
  360. 11420  GOTO 11515
  361. 11500  POKE 216,0: CALL FIX: GOSUB 5000
  362. 11510  POKE 770,0: PRINT "Unable to read '"FILE$"'."
  363. 11515  PRINT : PRINT "   Press any key. . ."
  364. 11520  IF  PEEK( -16384) < = 127  THEN 11520
  365. 11530  POKE  -16368,0
  366. 11540  GOTO 1186
  367. 12000  REM  | Get String...
  368. 12010  PRINT "Filename ? ";:C$ = " "
  369. 12020  GET VL$:CM% =  ASC(VL$)
  370. 12030  IF  LEN(C$) <2  OR (CM% < >8  AND CM% < >127)  THEN 12070
  371. 12040 C$ =  LEFT$(C$, LEN(C$) -1)
  372. 12050  POKE 770, PEEK(770) -1: POKE 769,0
  373. 12060  PRINT "  ";: POKE 770, PEEK(770) -2
  374. 12070  IF CM% = 13  THEN 12110
  375. 12080  IF  LEN(C$) >25  THEN 12020
  376. 12085  IF (CM% <65  OR CM% >122)  AND CM% < >47  THEN 12020
  377. 12090 C$ = C$ +VL$: POKE 769,1: PRINT VL$;
  378. 12095  IF VL$ = "i"  OR VL$ = "l"  OR VL$ = "I"  THEN  POKE 770, PEEK(770) +1
  379. 12100  GOTO 12020
  380. 12110 C$ =  MID$ (C$,1): RETURN